package controller;

import controls.IMasterControl;
import model.IPhysicalDataModel;
import model.PhysicalDataModel;
import eventManager.EventManager;
import eventManager.IEventData;
import eventStrategies.physicalModel.AddCacheStrategy;
import eventStrategies.physicalModel.AddGameEventStrategy;
import eventStrategies.physicalModel.AddItemStrategy;
import eventStrategies.physicalModel.AddNameStrategy;
import eventStrategies.physicalModel.AddPuzzleStrategy;
import eventStrategies.physicalModel.GetAgeStrategy;
import eventStrategies.physicalModel.GetCacheListStrategy;
import eventStrategies.physicalModel.GetCurrentNameStrategy;
import eventStrategies.physicalModel.GetDensityStrategy;
import eventStrategies.physicalModel.GetFullEnergyStrategy;
import eventStrategies.physicalModel.GetGameEventListStrategy;
import eventStrategies.physicalModel.GetGravEnergyStrategy;
import eventStrategies.physicalModel.GetGravityStrategy;
import eventStrategies.physicalModel.GetHexLocationStrategy;
import eventStrategies.physicalModel.GetItemListStrategy;
import eventStrategies.physicalModel.GetLocationStrategy;
import eventStrategies.physicalModel.GetLuminosityStrategy;
import eventStrategies.physicalModel.GetMagFieldStrategy;
import eventStrategies.physicalModel.GetMagneticEnergyStrategy;
import eventStrategies.physicalModel.GetMassEnergyStrategy;
import eventStrategies.physicalModel.GetNameListStrategy;
import eventStrategies.physicalModel.GetOrbitalRadiusStrategy;
import eventStrategies.physicalModel.GetPuzzleListStrategy;
import eventStrategies.physicalModel.GetRadiationEnergyStrategy;
import eventStrategies.physicalModel.GetRadiusStrategy;
import eventStrategies.physicalModel.GetRotationStrategy;
import eventStrategies.physicalModel.GetSpinEnergyStrategy;
import eventStrategies.physicalModel.GetTemperatureStrategy;
import eventStrategies.physicalModel.GetVelocityStrategy;
import eventStrategies.physicalModel.GetVolumeStrategy;
import eventStrategies.physicalModel.RemoveCacheStrategy;
import eventStrategies.physicalModel.RemoveGameEventStrategy;
import eventStrategies.physicalModel.RemoveItemStrategy;
import eventStrategies.physicalModel.RemoveNameStrategy;
import eventStrategies.physicalModel.RemovePuzzleStrategy;
import eventStrategies.physicalModel.SetHexLocationStrategy;
import eventStrategies.physicalModel.SetLocationStrategy;
import eventStrategies.physicalModel.SetLuminosityStrategy;
import eventStrategies.physicalModel.SetMagFieldStrategy;
import eventStrategies.physicalModel.SetMassStrategy;
import eventStrategies.physicalModel.SetOrbitalRadiusStrategy;
import eventStrategies.physicalModel.SetRadiusStrategy;
import eventStrategies.physicalModel.SetRotationStrategy;
import eventStrategies.physicalModel.SetTemperatureStrategy;
import eventStrategies.physicalModel.SetVelocityStrategy;

public final class PhysicalEventStrategyPack  {

	//private AbstractController controller;
	
//	public PhysicalEventStrategyPack(AbstractController controller, IPhysicalDataModel model) {
//		//super(eventManager);
//		this.controller = controller;
//		//loadPhysicalEventStrategies(model);
//	}

	//Override to load event handling strategies for a specific PhysicalModel object
	//protected abstract void loadCustomEventStrategies();

	//Loads event handling strategies for all PhysicalModel objects
	public static void loadPhysicalEventStrategies(IMasterControl control, IPhysicalDataModel model) {
		control.loadStrategy(new AddCacheStrategy(model));
//		controller.loadStrategy(new AddGameEventStrategy(model));
//		controller.loadStrategy(new AddItemStrategy(model));
//		controller.loadStrategy(new AddNameStrategy(model));
//		controller.loadStrategy(new AddPuzzleStrategy(model));
		
//		controller.loadStrategy(new GetAgeStrategy(controller, model));
//		controller.loadStrategy(new GetCacheListStrategy(controller, model));
//		controller.loadStrategy(new GetCurrentNameStrategy(controller, model));
//		controller.loadStrategy(new GetDensityStrategy(controller, model));
//		controller.loadStrategy(new GetFullEnergyStrategy(controller, model));
//		controller.loadStrategy(new GetGameEventListStrategy(controller, model));
//		controller.loadStrategy(new GetGravEnergyStrategy(controller, model));
//		controller.loadStrategy(new GetGravityStrategy(controller, model));
//		controller.loadStrategy(new GetItemListStrategy(controller, model));
//		controller.loadStrategy(new GetLocationStrategy(controller, model));
//		controller.loadStrategy(new GetHexLocationStrategy(controller, model));
//		controller.loadStrategy(new GetLuminosityStrategy(controller, model));
//		controller.loadStrategy(new GetMagFieldStrategy(controller, model));
//		controller.loadStrategy(new GetMagneticEnergyStrategy(controller, model));
//		controller.loadStrategy(new GetMassEnergyStrategy(controller, model));
//		controller.loadStrategy(new GetNameListStrategy(controller, model));
//		controller.loadStrategy(new GetOrbitalRadiusStrategy(controller, model));
//		controller.loadStrategy(new GetPuzzleListStrategy(controller, model));
//		controller.loadStrategy(new GetRadiationEnergyStrategy(controller, model));
//		controller.loadStrategy(new GetRadiusStrategy(controller, model));
//		controller.loadStrategy(new GetRotationStrategy(controller, model));
//		controller.loadStrategy(new GetSpinEnergyStrategy(controller, model));
//		controller.loadStrategy(new GetTemperatureStrategy(controller, model));
//		controller.loadStrategy(new GetVelocityStrategy(controller, model));
//		controller.loadStrategy(new GetVolumeStrategy(controller, model));
//		
//		controller.loadStrategy(new RemoveCacheStrategy(model));
//		controller.loadStrategy(new RemoveItemStrategy(model));
//		controller.loadStrategy(new RemoveGameEventStrategy(model));
//		controller.loadStrategy(new RemoveNameStrategy(model));
//		controller.loadStrategy(new RemovePuzzleStrategy(model));
//		
//		//loadSingleEvent(new SetAgeStrategy()); //not clear if this a necessary SET
//		controller.loadStrategy(new SetLocationStrategy(model));
//		controller.loadStrategy(new SetHexLocationStrategy(model));
//		controller.loadStrategy(new SetLuminosityStrategy(model));
//		controller.loadStrategy(new SetMagFieldStrategy(model));
//		controller.loadStrategy(new SetMassStrategy(model));
//		controller.loadStrategy(new SetOrbitalRadiusStrategy(model));
//		controller.loadStrategy(new SetRadiusStrategy(model));
//		controller.loadStrategy(new SetRotationStrategy(model));
//		controller.loadStrategy(new SetTemperatureStrategy(model));
//		controller.loadStrategy(new SetVelocityStrategy(model));
		
		/*
		 * Not clear if replies are standard for all physicalModel objects.
		 * Likely needed for specific, custom physical objects  
		 */
//		loadSingleEvent(new ReplyGetAgeStrategy());
//		loadSingleEvent(new ReplyGetDensityStrategy());
//		loadSingleEvent(new ReplyGetFullEnergyStrategy());
//		loadSingleEvent(new ReplyGetGravEnergyStrategy());
//		loadSingleEvent(new ReplyGetGravityStrategy());
//		loadSingleEvent(new ReplyGetLocationStrategy());
//		loadSingleEvent(new ReplyGetLuminosityStrategy());
//		loadSingleEvent(new ReplyGetMagFieldStrategy());
//		loadSingleEvent(new ReplyGetMagneticEnergyStrategy());
//		loadSingleEvent(new ReplyGetMassEnergyStrategy());
//		loadSingleEvent(new ReplyGetOrbitalRadiusStrategy());
//		loadSingleEvent(new ReplyGetRadiationEnergyStrategy());
//		loadSingleEvent(new ReplyGetRadiusStrategy());
//		loadSingleEvent(new ReplyGetRotationStrategy());
//		loadSingleEvent(new ReplyGetSpinEnergyStrategy());
//		loadSingleEvent(new ReplyGetTemperatureStrategy());
//		loadSingleEvent(new ReplyGetVelocityStrategy());
//		loadSingleEvent(new ReplyGetVolumeStrategy());
		
	}
	
	

}
